/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import pojos.Cliente;

/**
 * Subclase de 'AbstractTableModel'
 * Modificamos los metodos de 'AbstractTableModel' 
 * @author Ⓒvenegas
 */
public class TableModel_Clientes extends AbstractTableModel{
    
    private List <String> listaColumnNames;
    private List <Cliente> listaClientes;
        
    
    /**
     * Contructor
     * @param listaColumnNames Nombre de las columnas de la Tabla
     */
    public TableModel_Clientes(List <String> listaColumnNames) {
        this.listaColumnNames = listaColumnNames;
        this.listaClientes = new LinkedList();
    }

    
    public List<String> getListaColumnNames() {
        return listaColumnNames;
    }

    public void setListaColumnNames(List<String> listaColumnNames) {
        this.listaColumnNames = listaColumnNames;
    }

    public List<Cliente> getListaCliente() {
        return listaClientes;
    }

    public void setListaClientes(List<Cliente> listaCliente) {
        this.listaClientes = listaCliente;
    }
    
    
    /**
     * Numero de Columnas que tendrá el JTable
     * @return numero de Columnas
     */
    @Override
    public int getColumnCount() {
        //Resto uno porque mi Vector de nombre de columnas tiene un elemento que no quiero mostrar -> ID
        return listaColumnNames.size() -1;
    }

    /**
     * Numero de Filas que tendrá nuestro JTable
     * @return numero de Filas
     */
    @Override
    public int getRowCount() {
        return listaClientes.size();
    }

    /**
     * Nombre a visualizar como cabecera de cada una de las columnas
     * @param col numero de columna
     * @return El nombre de la columna a visualizar
     */
    @Override
    public String getColumnName(int col) {
        return listaColumnNames.get(col);
    }

    /**
     * Valor de cada una de las celdas del JTable
     * @param row Fila de la celda
     * @param col Columna de la celda
     * @return Valor obtenido segun row * ColumnCount + col
     */
    @Override
    public Object getValueAt(int row, int col) {
        Cliente cliente = listaClientes.get(row);
        
        switch (col){
            case 0: return cliente.getIdCliente();
            case 1: return cliente.getEmpleados().getNombre();
            case 2: return cliente.getNombre();
            case 3: return cliente.getCif();
            case 4: return cliente.getDireccion();
            default: return null;
        }
        
    }

    
    /**
     * Devuelve el tipo de clase de los objeto de cada columna
     * @param c numero de columna
     * @return La clase de los objetos
     */
    @Override
    public Class getColumnClass(int c) {
        Class retorno = null;
        if (c==0) {
            retorno = Integer.class;
        } else if (c==1) {
            retorno = Integer.class;
        } else if (c==2) {
            retorno = String.class;
        } else if (c==3) {
            retorno = String.class;
        } else if (c==4) {
            retorno = String.class;
        } 
        return retorno;
    }

    /**
     * Determina si una celda es editable o no.
     * En nuestro caso ninguna es editable
     * @param row. Número de fila.
     * @param col. Número de columna.
     * @return Indicador de si es editable
     */
    @Override
    public boolean isCellEditable(int row, int col) {
        return false;
    }

    
    /**
     * Este método se ejecuta ante un cambio en una celda. Modifica 
     * el contenido del modelo asociado a la tabla.
     * @param value. Nuevo valor de la celda.
     * @param row. Número de la fila modificada.
     * @param col. Número de la columna modificada
     */
    @Override
    public void setValueAt(Object value, int row, int col) {
        
//        Intervenciones intervencion = listaIntervenciones.get(row);
//
//        switch (col) {
//            case 0:
//                intervencion.setIdIntervencion((Integer)value);
//                break;
//            case 1:
//                intervencion.setFechaIntervencion((Date)value);
//                break;
//            case 2:
//                intervencion.setNumQuirofano((Integer)value);
//                break;
//            case 3:
//                intervencion.setEspecialidad((String)value);
//                break;
//        }
//        fireTableCellUpdated(row, col);
    }

}